﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CRUD.InterfaceDAO;
using CapaNegocios;
using GestionadorBaseDatos;
using CapaGestion.Spring;

namespace CapaGestion
{
    /// <summary>
    /// Gestiona las categorias del sistema
    /// </summary>
    public class GestionarCategoria : IGestionCategoria
    {
        private IDaoCategoria daoCategoria;
        private IDaoEvento daoEvento;
        private IDaoParticipante daoParticipante;
        private IList eventosDevueltos = new ArrayList();

        /// <summary>
        /// Gestiona la insercion de una categoria nueva
        /// </summary>
        /// <param name="crearForma"></param>
        public void Insert(Categoria crearForma)
        {
            daoCategoria.Insert(crearForma);
        }

        /// <summary>
        ///Gestiona lo que es insertar un evento en una categoria determinada 
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public Categoria GetById(Categoria Id)
        {
            return insertarEventoParticipantes(daoCategoria.GetById(Id));
        }

        /// <summary>
        /// metodo para obtener todas las categorias
        /// </summary>
        /// <returns></returns>
        public IList GetAll()
        {
            return insertarParticipantesEvento(daoCategoria.GetAll());
        }

        /// <summary>
        /// Gestiona los eventos que va a tener cada categoria
        /// </summary>
        /// <param name="agregarDatos"></param>
        /// <returns></returns>
        public IList insertarParticipantesEvento(IList agregarDatos)
        {
            int numeroCampos = agregarDatos.Count;
            for (int i = 0; i < numeroCampos; i++)
            {
                Categoria agregar = (Categoria)agregarDatos[i];
                agregar.ListaEventos = daoEvento.GetByCategoria(agregar.IdCategoria);
                agregar.ListaParticipantes = daoParticipante.GetByCategoria(agregar.IdCategoria);
                eventosDevueltos.Add(agregar);
            }
            return eventosDevueltos;
        }

        /// <summary>
        /// procedimiento que completa los objetos que pertenecen a la categoria
        /// </summary>
        /// <param name="agregarDato">objeto a completar datos</param>
        /// <returns></returns>
        public Categoria insertarEventoParticipantes(Categoria agregarDato)
        {
            agregarDato.ListaEventos = daoEvento.GetByCategoria(agregarDato.IdCategoria);
            agregarDato.ListaParticipantes = daoParticipante.GetByCategoria(agregarDato.IdCategoria);
            return agregarDato;
        }
    }
}
